local RSNG = RSNG
local AceOO = AceLibrary("AceOO-2.0")

local C = RSNG.Classes

--[[
ISerializable is the basic interface for saving information.
	
IFilter is used to choose which unit to take into account.
	
ITooltipInfo provides information for tooltips.
	
IBarInfo is an information provider for status bar.

IButtonInfo is an information provider for button. (buff button)

]]

local ISerializable = AceOO.Interface{
	Serialize = "function",
	GetOptionTable = "function",
}

local IFilter = AceOO.Interface{
	Filter = "function",
}

local ITooltipInfo = AceOO.Interface{
	SetTooltip = "function",
}

-- Update() updates the visual representation of the UI element. This is called from the I*Info class.
--[[ WARNING:
	There is a circular approach to SetInfo() and Set*() in the info:
	mybar:SetInfo(mybarinfo) calls mybarinfo:SetStatusBar(mybar) which calls
	mybar:SetInfo(mybarinfo) again. So be cautious about it.
]]
local IUIElement = AceOO.Interface{
	Update = "function",
	GetFrame = "function",
	SetInfo = "function",
	Create = "function",
}

local IStatusBarInfo = AceOO.Interface{
	GetText = "function",
	GetTextFormat = "function",
	GetColor = "function",
	GetCount = "function",
	SetStatusBar = "function",
}

local IButtonInfo = AceOO.Interface{
	SetButton = "function",
}

C.ISerializable = ISerializable
C.IFilter = IFilter
C.IUIElement = IUIElement
C.ITooltipInfo = ITooltipInfo
C.IStatusBarInfo = IStatusBarInfo
C.IButtonInfo = IButtonInfo
